import { DateTimeCore } from './DateTimeCore';

/**
 * 日期时间格式化器类
 * @class DateTimeFormatter
 * @description 提供各种预定义的日期时间格式化方法，用于将日期时间转换为常用的字符串格式
 */
export class DateTimeFormatter {
  /**
   * DateTimeCore实例，提供基础日期时间操作
   * @private
   */
  private __core: DateTimeCore;

  /**
   * 构造函数
   * @param {DateTimeCore} core - DateTimeCore实例
   * @returns {DateTimeFormatter} 新的DateTimeFormatter实例
   */
  constructor(core: DateTimeCore) {
    this.__core = core;
  }

  /**
   * 格式化为日期字符串（YYYY-MM-DD）
   * @returns {string} 格式化后的日期字符串，格式为'YYYY-MM-DD'
   * @example
   * const date = new DateTime();
   * const dateString = date.formatter.date(); // '2025-12-11'
   */
  date(): string {
    return this.__core.dayjs().format('YYYY-MM-DD');
  }

  /**
   * 格式化为时间字符串（HH:mm:ss）
   * @returns {string} 格式化后的时间字符串，格式为'HH:mm:ss'
   * @example
   * const date = new DateTime();
   * const timeString = date.formatter.time(); // '14:30:45'
   */
  time(): string {
    return this.__core.dayjs().format('HH:mm:ss');
  }

  /**
   * 格式化为日期时间字符串（YYYY-MM-DD HH:mm:ss）
   * @returns {string} 格式化后的日期时间字符串，格式为'YYYY-MM-DD HH:mm:ss'
   * @example
   * const date = new DateTime();
   * const datetimeString = date.formatter.datetime(); // '2025-12-11 14:30:45'
   */
  datetime(): string {
    return this.__core.dayjs().format('YYYY-MM-DD HH:mm:ss');
  }

  /**
   * 格式化为中文日期字符串（YYYY年MM月DD日）
   * @returns {string} 格式化后的中文日期字符串，格式为'YYYY年MM月DD日'
   * @example
   * const date = new DateTime();
   * const chineseDateString = date.formatter.chineseDate(); // '2025年12月11日'
   */
  chineseDate(): string {
    return this.__core.dayjs().format('YYYY年MM月DD日');
  }

  /**
   * 格式化为中文日期时间字符串（YYYY年MM月DD日 HH:mm:ss）
   * @returns {string} 格式化后的中文日期时间字符串，格式为'YYYY年MM月DD日 HH:mm:ss'
   * @example
   * const date = new DateTime();
   * const chineseDatetimeString = date.formatter.chineseDatetime(); // '2025年12月11日 14:30:45'
   */
  chineseDatetime(): string {
    return this.__core.dayjs().format('YYYY年MM月DD日 HH:mm:ss');
  }

  /**
   * 格式化为短日期字符串（YYYY/MM/DD）
   * @returns {string} 格式化后的短日期字符串，格式为'YYYY/MM/DD'
   * @example
   * const date = new DateTime();
   * const shortDateString = date.formatter.shortDate(); // '2025/12/11'
   */
  shortDate(): string {
    return this.__core.dayjs().format('YYYY/MM/DD');
  }


  /**
   * 根据指定格式返回字符串
   * @param {string} format - 格式化字符串，默认为'YYYY-MM-DD HH:mm:ss'
   * @returns {string} 格式化后的日期时间字符串
   * @example
   * const date = new DateTime('2025-12-11 14:30:45');
   * date.formatter.custom(); // '2025-12-11 14:30:45'
   * date.formatter.custom('YYYY-MM-DD'); // '2025-12-11'
   * date.formatter.custom('HH:mm:ss'); // '14:30:45'
   * date.formatter.custom('YYYY年MM月DD日'); // '2025年12月11日'
   */
  custom(format: string = 'YYYY-MM-DD HH:mm:ss'): string {
    return this.__core.dayjs().format(format);
  }
}